{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from math import pi, sin, cos, tan\n",
    "from matplotlib import pyplot as plt\n",
    "import pickle\n",
    "import numpy as np\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "\n",
    "\n",
    "class Car:\n",
    "    \n",
    "    fps       = 16.0     # frames per second\n",
    "    dt        = 1.0 / fps # time per frame\n",
    "    max_steer = 30.0      # degrees\n",
    "    L         = 4.0       # meters\n",
    "    max_a     = 2 * 9.8   # m/s/s\n",
    "    max_brake = 5 * 9.8   \n",
    "    \n",
    "    def __init__(self):\n",
    "        # state variables\n",
    "        self.x     = 0.0\n",
    "        self.y     = 0.0\n",
    "        self.theta = 0.0  # east\n",
    "        self.speed = 0.0\n",
    "        self.omega = 0.0\n",
    "        self.t     = 0.0\n",
    "        \n",
    "        # driver controllable\n",
    "        self.a_y   = 0.0\n",
    "        self.alpha = 0.0\n",
    "        \n",
    "        # state history\n",
    "        self.history = [(0,0,0,0,0,0,0,0)]\n",
    "        \n",
    "        self.braking = False\n",
    "        self.backing = False\n",
    "        \n",
    "    def reverse(self):\n",
    "        self.a_y = 0.0\n",
    "        self.backing = True\n",
    "        \n",
    "    def forward(self):\n",
    "        self.a_y = 0.0\n",
    "        self.backing = False\n",
    "\n",
    "    def steer(self, angle):\n",
    "        assert -self.max_steer <= angle <= self.max_steer\n",
    "        self.alpha = angle * pi / 180\n",
    "    \n",
    "    def gas(self, amount):\n",
    "        assert -1.0 <= amount <= 1.0\n",
    "        self.a_y = amount * self.max_a\n",
    "        \n",
    "#     def brake(self, amount):\n",
    "#         assert 0.0 <= amount <= 1.0\n",
    "#         sgn = -1.0\n",
    "#         if self.speed < 0.0:\n",
    "#             sgn = 1.0\n",
    "#         self.braking = True\n",
    "#         self.a_y = sgn * amount * self.max_brake\n",
    "    \n",
    "    def go(self, duration):\n",
    "        num_frames = int(duration / self.dt)\n",
    "        for i in range(num_frames):\n",
    "            snapshot = (\n",
    "                self.t+self.dt,    # \n",
    "                self.a_y,  # \n",
    "                self.speed,#\n",
    "                self.x,    \n",
    "                self.y,    \n",
    "                self.theta,\n",
    "                self.omega, #\n",
    "                self.alpha,#\n",
    "            )\n",
    "            self.history.append(snapshot)\n",
    "            self.increment_frame()\n",
    "    \n",
    "    def increment_frame(self):\n",
    "        new_t      = self.t + self.dt\n",
    "        new_a_y    = self.a_y\n",
    "        new_speed  = self.speed + self.a_y * self.dt\n",
    "        if self.backing:\n",
    "            new_speed  = self.speed - self.a_y * self.dt \n",
    "        new_alpha  = self.alpha\n",
    "        new_omega  = self.speed / self.L * tan(self.alpha)\n",
    "        new_theta  = (self.theta + self.omega * self.dt) % (2*pi)\n",
    "        \n",
    "        # intermediate steps for x, y\n",
    "        distance   = self.speed * self.dt\n",
    "        dx         = distance * cos(self.theta)\n",
    "        dy         = distance * sin(self.theta)\n",
    "        \n",
    "        new_x      = self.x + dx\n",
    "        new_y      = self.y + dy\n",
    "        \n",
    "        self.t     = new_t\n",
    "        self.a_y   = new_a_y\n",
    "        self.speed = new_speed\n",
    "        self.alpha = new_alpha\n",
    "        self.omega = new_omega\n",
    "        self.theta = new_theta\n",
    "        self.x     = new_x\n",
    "        self.y     = new_y\n",
    "        \n",
    "    def show_history(self, increment=10):\n",
    "        t, a, s, x, y, theta, omega, alpha = np.array(car.history).T\n",
    "        plt.scatter(x[::increment],y[::increment])\n",
    "        \n",
    "    def show_history2(self, inc=10):\n",
    "        t, a, s, x, y, theta, omega, alpha = np.array(car.history).T\n",
    "        u = np.cos(theta)\n",
    "        v = np.sin(theta)\n",
    "#         m = np.hypot(u,v)\n",
    "        Q = plt.quiver(x[::inc],y[::inc],u[::inc],v[::inc], \n",
    "                       units='x', pivot='tip')\n",
    "        qk = plt.quiverkey(Q, 0.9, 0.9, 2, r'$1 \\frac{m}{s}', \n",
    "                           labelpos='E', coordinates='figure' )\n",
    "        \n",
    "        \n",
    "    def get_displacements(self):\n",
    "        disp = 0\n",
    "        displacements = [disp]\n",
    "        t, a, s, x, y, theta, omega, alpha = np.array(car.history).T\n",
    "        last_t = 0.0\n",
    "        for ts, speed in zip(t[1:], s[1:] ):\n",
    "            dt = ts - last_t\n",
    "            dD = speed * dt\n",
    "            disp += dD\n",
    "            displacements.append(disp)\n",
    "            last_t = ts\n",
    "        return displacements\n",
    "        \n",
    "        \n",
    "    def save_trajectory(self, filename):\n",
    "        t, a, s, x, y, theta, omega, alpha = np.array(car.history).T\n",
    "        displacements = self.get_displacements()\n",
    "        assert(len(displacements) == len(t) )\n",
    "        trajectory = zip(t, displacements, omega, a)\n",
    "        with open(filename, 'wb') as f:\n",
    "            pickle.dump(trajectory, f)\n",
    "        print(\"saved trajectory to\", filename)\n",
    "            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "car = Car()\n",
    "car.gas(0.2)\n",
    "car.steer(0.0)\n",
    "car.go(5.0)\n",
    "\n",
    "car.gas(0.0)\n",
    "car.steer(20)\n",
    "car.go(1.0)\n",
    "\n",
    "car.gas(-0.35)\n",
    "car.go(2.0)\n",
    "\n",
    "car.gas(0.0)\n",
    "car.steer(0.0)\n",
    "car.go(0.5)\n",
    "\n",
    "car.gas(0.5)\n",
    "car.go(3.5)\n",
    "car.gas(0.0)\n",
    "car.go(1.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "car.show_history2(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saved trajectory to trajectory_1.pickle\n"
     ]
    }
   ],
   "source": [
    "car.save_trajectory(\"trajectory_1.pickle\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "car = Car()\n",
    "\n",
    "car.reverse()\n",
    "car.gas(0.1)\n",
    "car.steer(0.0)\n",
    "car.go(1.0)\n",
    "\n",
    "car.gas(0.0)\n",
    "car.steer(-car.max_steer)\n",
    "car.go(1.0)\n",
    "\n",
    "car.steer(car.max_steer)\n",
    "car.go(1.0)\n",
    "\n",
    "car.steer(0.0)\n",
    "car.go(0.2)\n",
    "\n",
    "car.forward()\n",
    "car.gas(0.15)\n",
    "car.go(2.0)\n",
    "\n",
    "car.gas(0.0)\n",
    "car.go(0.2)\n",
    "\n",
    "car.reverse()\n",
    "car.gas(0.5)\n",
    "car.go(0.41)\n",
    "\n",
    "car.show_history2(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saved trajectory to sharp_left.pickle\n"
     ]
    }
   ],
   "source": [
    "car.save_trajectory(\"sharp_left.pickle\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "         0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "         0.00000000e+00,  0.00000000e+00],\n",
       "       [ 6.25000000e-02,  1.96000000e+00,  0.00000000e+00,\n",
       "         0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "         0.00000000e+00,  0.00000000e+00],\n",
       "       [ 1.25000000e-01,  1.96000000e+00, -1.22500000e-01,\n",
       "         0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "         0.00000000e+00,  0.00000000e+00],\n",
       "       [ 1.87500000e-01,  1.96000000e+00, -2.45000000e-01,\n",
       "        -7.65625000e-03,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 2.50000000e-01,  1.96000000e+00, -3.67500000e-01,\n",
       "        -2.29687500e-02,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.12500000e-01,  1.96000000e+00, -4.90000000e-01,\n",
       "        -4.59375000e-02,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.75000000e-01,  1.96000000e+00, -6.12500000e-01,\n",
       "        -7.65625000e-02,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 4.37500000e-01,  1.96000000e+00, -7.35000000e-01,\n",
       "        -1.14843750e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 5.00000000e-01,  1.96000000e+00, -8.57500000e-01,\n",
       "        -1.60781250e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 5.62500000e-01,  1.96000000e+00, -9.80000000e-01,\n",
       "        -2.14375000e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 6.25000000e-01,  1.96000000e+00, -1.10250000e+00,\n",
       "        -2.75625000e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 6.87500000e-01,  1.96000000e+00, -1.22500000e+00,\n",
       "        -3.44531250e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 7.50000000e-01,  1.96000000e+00, -1.34750000e+00,\n",
       "        -4.21093750e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 8.12500000e-01,  1.96000000e+00, -1.47000000e+00,\n",
       "        -5.05312500e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 8.75000000e-01,  1.96000000e+00, -1.59250000e+00,\n",
       "        -5.97187500e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 9.37500000e-01,  1.96000000e+00, -1.71500000e+00,\n",
       "        -6.96718750e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 1.00000000e+00,  1.96000000e+00, -1.83750000e+00,\n",
       "        -8.03906250e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 1.06250000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -9.18750000e-01,  0.00000000e+00,  0.00000000e+00,\n",
       "        -0.00000000e+00, -5.23598776e-01],\n",
       "       [ 1.12500000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -1.04125000e+00,  0.00000000e+00,  0.00000000e+00,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.18750000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -1.16375000e+00,  0.00000000e+00,  1.76813520e-02,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.25000000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -1.28623085e+00, -2.16585276e-03,  3.53627040e-02,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.31250000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -1.40865427e+00, -6.49688120e-03,  5.30440560e-02,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.37500000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -1.53098197e+00, -1.29917313e-02,  7.07254080e-02,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.43750000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -1.65317572e+00, -2.16483727e-02,  8.84067600e-02,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.50000000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -1.77519732e+00, -3.24640991e-02,  1.06088112e-01,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.56250000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -1.89700861e+00, -4.54355293e-02,  1.23769464e-01,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.62500000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -2.01857153e+00, -6.05586080e-02,  1.41450816e-01,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.68750000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -2.13984806e+00, -7.78286076e-02,  1.59132168e-01,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.75000000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -2.26080029e+00, -9.72401290e-02,  1.76813520e-01,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.81250000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -2.38139042e+00, -1.18787104e-01,  1.94494872e-01,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.87500000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -2.50158073e+00, -1.42462796e-01,  2.12176224e-01,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 1.93750000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -2.62133366e+00, -1.68259804e-01,  2.29857576e-01,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 2.00000000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -2.74061177e+00, -1.96170063e-01,  2.47538928e-01,\n",
       "         2.82901632e-01, -5.23598776e-01],\n",
       "       [ 2.06250000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -2.85937777e+00, -2.26184847e-01,  2.65220280e-01,\n",
       "         2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.12500000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -2.97759453e+00, -2.58294774e-01,  2.82901632e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.18750000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -3.09522510e+00, -2.92489805e-01,  2.65220280e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.25000000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -3.21344186e+00, -3.24599732e-01,  2.47538928e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.31250000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -3.33220786e+00, -3.54614516e-01,  2.29857576e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.37500000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -3.45148597e+00, -3.82524775e-01,  2.12176224e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.43750000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -3.57123890e+00, -4.08321783e-01,  1.94494872e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.50000000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -3.69142921e+00, -4.31997475e-01,  1.76813520e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.56250000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -3.81201934e+00, -4.53544450e-01,  1.59132168e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.62500000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -3.93297157e+00, -4.72955971e-01,  1.41450816e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.68750000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -4.05424810e+00, -4.90225971e-01,  1.23769464e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.75000000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -4.17581102e+00, -5.05349050e-01,  1.06088112e-01,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.81250000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -4.29762231e+00, -5.18320480e-01,  8.84067600e-02,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.87500000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -4.41964391e+00, -5.29136206e-01,  7.07254080e-02,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 2.93750000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -4.54183766e+00, -5.37792848e-01,  5.30440560e-02,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 3.00000000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -4.66416536e+00, -5.44287698e-01,  3.53627040e-02,\n",
       "        -2.82901632e-01,  5.23598776e-01],\n",
       "       [ 3.06250000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -4.78658878e+00, -5.48618726e-01,  1.76813520e-02,\n",
       "        -2.82901632e-01,  0.00000000e+00],\n",
       "       [ 3.12500000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -4.90906963e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.18750000e+00,  0.00000000e+00, -1.96000000e+00,\n",
       "        -5.03156963e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.25000000e+00,  2.94000000e+00, -1.96000000e+00,\n",
       "        -5.15406963e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.31250000e+00,  2.94000000e+00, -1.77625000e+00,\n",
       "        -5.27656963e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.37500000e+00,  2.94000000e+00, -1.59250000e+00,\n",
       "        -5.38758525e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.43750000e+00,  2.94000000e+00, -1.40875000e+00,\n",
       "        -5.48711650e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.50000000e+00,  2.94000000e+00, -1.22500000e+00,\n",
       "        -5.57516338e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.56250000e+00,  2.94000000e+00, -1.04125000e+00,\n",
       "        -5.65172588e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.62500000e+00,  2.94000000e+00, -8.57500000e-01,\n",
       "        -5.71680400e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.68750000e+00,  2.94000000e+00, -6.73750000e-01,\n",
       "        -5.77039775e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.75000000e+00,  2.94000000e+00, -4.90000000e-01,\n",
       "        -5.81250713e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.81250000e+00,  2.94000000e+00, -3.06250000e-01,\n",
       "        -5.84313213e+00, -5.50784579e-01,  6.93889390e-18,\n",
       "        -0.00000000e+00,  0.00000000e+00],\n",
       "       [ 3.8750000"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<b>limit_output extension: Maximum message size of 10000 exceeded with 14973 characters</b>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.array(car.history)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "\n",
    "def process_data(filename):\n",
    "    with open(filename, 'rb') as f:\n",
    "        data_list = pickle.load(f)\n",
    "    return list(data_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "ename": "FileNotFoundError",
     "evalue": "[Errno 2] No such file or directory: 'trajectory_2.pickle'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-10-17aa3e33227e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprocess_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"trajectory_2.pickle\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-9-95ca92808c2e>\u001b[0m in \u001b[0;36mprocess_data\u001b[0;34m(filename)\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mprocess_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m     \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'rb'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m         \u001b[0mdata_list\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpickle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_list\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'trajectory_2.pickle'"
     ]
    }
   ],
   "source": [
    "data = process_data(\"trajectory_2.pickle\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'data' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-11-80a4aab09c73>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'data' is not defined"
     ]
    }
   ],
   "source": [
    "data[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'data' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-12-f6ba78b38ad4>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mT\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mD\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'data' is not defined"
     ]
    }
   ],
   "source": [
    "T = list(np.array(data).T[0])\n",
    "D = list(np.array(data).T[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'T' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-13-9cdc48157156>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mD\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'T' is not defined"
     ]
    }
   ],
   "source": [
    "plt.scatter(T,D)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
